#!/bin/bash

read_dir() {
    for file in $(ls -a $1); do
        # 文件夹递归遍历
        if [ -d $1"/"$file ]; then
            if [[ $file != '.' && $file != '..' ]]; then
                read_dir $1"/"$file
            fi
        else
            #处理.h .c .cpp后缀文件中的注释
            if [ ${file##*.} = 'cpp' ] || [ ${file##*.} = 'c' ] || [ ${file##*.} = 'h' ]; then
                echo $file

                #删除//开头的注释
                sed -i '/^\s*\/\/.*$/d' $1"/"$file
                #删除//在行尾的注释
                sed -i 's/\s\+\/\/.*$//' $1"/"$file
                #删除/**/ 在一行的注释
                sed -i 's/\/\*.*\*\///' $1"/"$file
                #删除/**/ 跨行的注释
                # sed -Ei ':a;$!{N;ba};s|/\*[^*]*\*+([^/*][^*]*\*+)*/||' $1"/"$file
                # sed -i 's|/\*|\n&|g;s|*/|&\n|g' $1"/"$file && sed -i '/\/\*/,/*\//d' $1"/"$file
                sed -Ei ':a; s%(.*)/\*.*\*/%\1%; ta; /\/\*/ !b; N; ba' $1"/"$file
                #删除空行
                sed -i '/^\s*$/d' $1"/"$file
            fi
        fi
    done
}

echo "start comment remove"

read_dir $1

echo "end comment remove"
